/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：UICompositeDataGrid.js<br>
 * 日期：2016年8月8日<br>
 * 作者: 王志远<br>
 * 功能：定义数据表格组件<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 * 
 ******************************************************************************/
window.makeNamespace(window,"Rainier.UI.V2");
/**
 * 此对象扩展自datagrid，使用方法与dataGrid组件相似
 * @type {[type]}
 */
 Rainier.UI.V2.UICompositeEditorDataGrid = Rainier.UI.V2.UIComposite.extend({
 	 //定义类名称
    NAME : 'com.rainier.easyuiex.UICompositeDataGrid',
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.init<br>
     * 函数功能：构造函数<br>
     * 参数输入：parentcom [父组件]<br>
     * 参数熟人：properties [组件属性]<br>
     * 异常信息：无<br>
     */
    init : function(parentcom,properties){   
        this._super(parentcom,properties,"datagrid");
    },   

    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.appendEventHandler<br>
     * 函数功能：注册事件<br>
     * 参数输入：parentcom [com.rainier.easyuiex.UIComposite] [父组件]  <br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    appendEventHandler : function(){        
        this.m_aEventList = ['onClick',
                             'onDblClick',
                             'onDblClickRow',
                             'onBeforeLoad',
                             'onLoadSuccess',
                             'onLoadError',
                             'onBeforeExpand',
                             'onExpand',
                             'onBeforeCollapse',
                             'onCollapse',
                             'onBeforeCheck',
                             'onCheck',
                             'onBeforeSelect',
                             'onSelect',
                             'onContextMenu',
                             'onBeforeDrag',
                             'onStartDrag',
                             'onStopDrag',
                             'onDragEnter',
                             'onDragOver',
                             'onDragLeave',
                             'onBeforeDrop',
                             'onDrop',
                             'onBeforeEdit',
                             'onAfterEdit',
                             'onCancelEdit',
                             ];
        this._super();
    }, 
    
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.createComposite<br>
     * 函数功能：创建组件<br>
     * 参数输入：parentcom [com.rainier.easyuiex.UIComposite] [父组件]  <br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    createComposite : function(parentcom) {
        var newElement = this.CreateElement('table',this.getUuid());
        parentcom.append(newElement);     
        newElement.datagrid(this.m_objProperties);
        newElement.datagrid('enableCellEditing');
        this.refreshPagination();
    },    

    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.refreshPagination<br>
     * 函数功能：更新分页<br>
     * 参数输入：parentcom [com.rainier.easyuiex.UIComposite] [父组件]  <br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    refreshPagination : function(){
        var _this = this;
        var _ele  = this.getElement();
        if(_this.m_objProperties.pagination && _this.m_objProperties.data){
            var pager = _this.getElement().datagrid("getPager"); 
            pager.pagination({ 
                total:_this.m_objProperties.data.length, 
                onSelectPage:function (pageNo, pageSize) { 
                    var start = (pageNo - 1) * pageSize; 
                    var end = start + pageSize; 
                    _ele.datagrid('loadData',_this.m_objProperties.data.slice(start, end)); 
                    pager.pagination('refresh', { 
                        total:_this.m_objProperties.data.length, 
                        pageNumber:pageNo 
                    }); 
                } 
            });
            pager.pagination('select',1);
        }
    }, 

    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getPager<br>
     * 函数功能：返回分页（pager）对象。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getPager: function(){
        return this.getElement().datagrid('getPager');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getPanel<br>
     * 函数功能：返回面板（panel）对象。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getPanel: function(){
        return this.getElement().datagrid('getPanel');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getColumnFields<br>
     * 函数功能：返回列的字段，如果 frozen 设置为 true，则冻结列的字段被返回。<br>
     * 参数输入：bFrozen     是否冻结<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getColumnFields: function(bFrozen){
        return this.getElement().datagrid('getColumnFields',bFrozen);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getColumnOption<br>
     * 函数功能：返回指定列的选项。<br>
     * 参数输入：sField      指定列<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getColumnOption: function(sField){
        return this.getElement().datagrid('getColumnOption',sField);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.resize<br>
     * 函数功能：调整尺寸和布局。<br>
     * 参数输入：param       尺寸<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    resize: function(param){
        return this.getElement().datagrid('resize',param);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.load<br>
     * 函数功能：加载并显示第一页的行，如果指定 'param' 参数，它将替换 queryParams 属性。
     *          通常情况下，通过传递一些从参数进行查询，该方法被调用来从服务器加载新数据。<br>
     * 参数输入：param       
     *          {
     *              code: '01',
     *              name: 'name01'
     *          }<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    load: function(param){
        return this.getElement().datagrid('load',param);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.reload<br>
     * 函数功能：重新加载行，就像 load 方法一样，但是保持在当前页。<br>
     * 参数输入：param       同上<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    reload: function(param){
        return this.getElement().datagrid('reload',param);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.reloadFooter<br>
     * 函数功能：重新加载底部的行。<br>
     * 参数输入：footer
     *          [
     *              {name: 'name1', salary: 60000},
     *              {name: 'name2', salary: 65000}
     *          ]<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */ 
    reloadFooter: function(footer){
        return this.getElement().datagrid('reloadFooter',footer);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.loading<br>
     * 函数功能：显示正在加载状态。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    loading: function(){
        return this.getElement().datagrid('loading');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.loaded<br>
     * 函数功能：隐藏正在加载状态。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    loaded: function(footer){
        return this.getElement().datagrid('loaded');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.fitColumns<br>
     * 函数功能：使列自动展开/折叠以适应数据网格（datagrid）的宽度。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    fitColumns: function(){
        return this.getElement().datagrid('fitColumns');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.fixColumnSize<br>
     * 函数功能：固定列的尺寸。如果 'field' 参数未设置，所有的列的尺寸将是固定的。<br>
     * 参数输入：field   字段名<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    fixColumnSize: function(field){
        return this.getElement().datagrid('fixColumnSize',field);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.fixRowHeight<br>
     * 函数功能：固定指定行的高度。如果 'index' 参数未设置，所有的行的高度将是固定的。<br>
     * 参数输入：index   行序号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    fixRowHeight: function(index){
        return this.getElement().datagrid('fixRowHeight',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.freezeRow<br>
     * 函数功能：冻结指定的行，以便数据网格（datagrid）向下滚动时这些冻结行总是被显示在顶部。<br>
     * 参数输入：index   行序号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    freezeRow: function(index){
        return this.getElement().datagrid('freezeRow',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.autoSizeColumn<br>
     * 函数功能：调整列的宽度以适应内容。<br>
     * 参数输入：field   字段名<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    autoSizeColumn: function(field){
        return this.getElement().datagrid('autoSizeColumn',field);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.loadData<br>
     * 函数功能：加载本地数据，旧的行会被移除。<br>
     * 参数输入：data    本地数据<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    loadData: function(data){
        this.m_objProperties.data = data;
        var re = this.getElement().datagrid('loadData',data);
        this.refreshPagination();
        return re;
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getData<br>
     * 函数功能：返回加载的数据。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getData: function(){
        return this.getElement().datagrid('getData');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getRows<br>
     * 函数功能：返回当前页的行。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getRows: function(){
        return this.getElement().datagrid('getRows');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getFooterRows<br>
     * 函数功能：返回底部的行。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getFooterRows: function(){
        return this.getElement().datagrid('getFooterRows');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getRowIndex<br>
     * 函数功能：返回指定行的索引，row 参数可以是一个行记录或者一个 id 字段的值。<br>
     * 参数输入：row     行记录或id 字段的值。<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getRowIndex: function(row){
        return this.getElement().datagrid('getRowIndex',row);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getChecked<br>
     * 函数功能：返回复选框选中的所有行。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getChecked: function(){
        return this.getElement().datagrid('getChecked');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getSelected<br>
     * 函数功能：返回第一个选中的行或者 null。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getSelected: function(){
        return this.getElement().datagrid('getSelected');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getSelections<br>
     * 函数功能：返回所有选中的行，当没有选中的记录时，将返回空数组。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getSelections: function(){
        return this.getElement().datagrid('getSelections');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.clearSelections<br>
     * 函数功能：清除所有的选择。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    clearSelections: function(){
        return this.getElement().datagrid('clearSelections');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.clearChecked<br>
     * 函数功能：清除所有勾选的行。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    clearChecked: function(){
        return this.getElement().datagrid('clearChecked');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.scrollTo<br>
     * 函数功能：滚动到指定行。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    scrollTo: function(index){
        return this.getElement().datagrid('scrollTo',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.gotoPage<br>
     * 函数功能：转到指定页面。<br>
     * 参数输入：param       页面号或
     *          {
     *              page: 3,
     *              callback: function(page){
     *                  console.log(page)
     *          }<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    gotoPage: function(param){
        var pager = this.getElement().datagrid("getPager"); 
        pager.pagination('select',(param.page) ? param.page : param);
        return this.getElement().datagrid('gotoPage',param);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.highlightRow<br>
     * 函数功能：高亮显示一行。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    highlightRow: function(index){
        return this.getElement().datagrid('highlightRow',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.selectAll<br>
     * 函数功能：选中当前页所有的行。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    selectAll: function(){
        return this.getElement().datagrid('selectAll');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.unselectAll<br>
     * 函数功能：取消选中当前页所有的行。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    unselectAll: function(){
        return this.getElement().datagrid('unselectAll');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.selectRow<br>
     * 函数功能：选中一行，行索引从 0 开始。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    selectRow: function(index){
        return this.getElement().datagrid('selectRow',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.selectRecord<br>
     * 函数功能：通过传递 id 的值做参数选中一行。<br>
     * 参数输入：idValue     id值<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    selectRecord: function(idValue){
        return this.getElement().datagrid('selectRecord',idValue);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.unselectRow<br>
     * 函数功能：取消选中一行。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    unselectRow: function(index){
        return this.getElement().datagrid('unselectRow',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.checkAll<br>
     * 函数功能：勾选当前页所有的行。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    checkAll: function(){
        return this.getElement().datagrid('checkAll');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.uncheckAll<br>
     * 函数功能：取消勾选当前页所有的行。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    uncheckAll: function(){
        return this.getElement().datagrid('uncheckAll');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.checkRow<br>
     * 函数功能：勾选一行，行索引从 0 开始。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    checkRow: function(index){
        return this.getElement().datagrid('checkRow',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.uncheckRow<br>
     * 函数功能：取消勾选一行，行索引从 0 开始。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    uncheckRow: function(index){
        return this.getElement().datagrid('uncheckRow',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.beginEdit<br>
     * 函数功能：开始对一行进行编辑。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    beginEdit: function(index){
        return this.getElement().datagrid('beginEdit',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.endEdit<br>
     * 函数功能：结束对一行进行编辑。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    endEdit: function(index){
        return this.getElement().datagrid('endEdit',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.cancelEdit<br>
     * 函数功能：取消对一行进行编辑。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    cancelEdit: function(index){
        return this.getElement().datagrid('cancelEdit',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getEditors<br>
     * 函数功能：获取指定行的编辑器。每个编辑器有下列属性：
     *              actions：编辑器能做的动作，与编辑器定义相同。
     *              target：目标编辑器的 jQuery 对象。
     *              field：字段名。
     *              type：编辑器的类型，比如：'text'、'combobox'、'datebox'，等等。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getEditors: function(index){
        return this.getElement().datagrid('getEditors',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getEditor<br>
     * 函数功能：获取指定的编辑器。<br>
     * 参数输入：options 参数包含两个属性：
     *                  index：行的索引。
     *                  field：字段名。<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getEditor: function(options){
        return this.getElement().datagrid('getEditor',options);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.refreshRow<br>
     * 函数功能：刷新一行。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    refreshRow: function(index){
        return this.getElement().datagrid('refreshRow',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.validateRow<br>
     * 函数功能：验证指定的行，有效时返回 true。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    validateRow: function(index){
        return this.getElement().datagrid('validateRow',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.updateRow<br>
     * 函数功能：更新指定的行。<br>
     * 参数输入：param 参数包括下列属性：
     *                  index：要更新的行的索引。
     *                  row：新的行数据。<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    updateRow: function(param){
        return this.getElement().datagrid('updateRow',param);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.appendRow<br>
     * 函数功能：追加一个新行。新的行将被添加在最后的位置：<br>
     * 参数输入：row     
     *          {
     *              name: 'new name',
     *              age: 30,
     *              note: 'some messages'
     *          }<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    appendRow: function(row){
        return this.getElement().datagrid('appendRow',row);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.insertRow<br>
     * 函数功能：插入一个新行。 <br>
     * 参数输入：param   参数包括下列属性：
     *                  index：插入进去的行的索引，如果没有定义，就追加该新行。
     *                  row：行的数据。<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    insertRow: function(param){
        return this.getElement().datagrid('insertRow',param);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.deleteRow<br>
     * 函数功能：删除一行。<br>
     * 参数输入：index       行号<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    deleteRow: function(index){
        return this.getElement().datagrid('deleteRow',index);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.getChanges<br>
     * 函数功能：获取最后一次提交以来更改的行，当 type 参数没有分配时，返回所有改变的行。<br>
     * 参数输入：type 参数表示更改的行的类型，可能的值是：inserted、deleted、updated，等等。<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    getChanges: function(type){
        return this.getElement().datagrid('getChanges',type);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.acceptChanges<br>
     * 函数功能：提交自从被加载以来或最后一次调用 acceptChanges 以来所有更改的数据。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    acceptChanges: function(){
        return this.getElement().datagrid('acceptChanges');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.rejectChanges<br>
     * 函数功能：回滚自从创建以来或最后一次调用 acceptChanges 以来所有更改的数据。<br>
     * 参数输入：无<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    rejectChanges: function(){
        return this.getElement().datagrid('rejectChanges');
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.mergeCells<br>
     * 函数功能：把一些单元格合并为一个单元格。<br>
     * 参数输入：options 参数包括下列特性：
     *                  index：列的索引。
     *                  field：字段名。
     *                  rowspan：合并跨越的行数。
     *                  colspan：合并跨越的列数。<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    mergeCells: function(options){
        return this.getElement().datagrid('mergeCells',options);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.showColumn<br>
     * 函数功能：显示指定的列。<br>
     * 参数输入：field   字段名<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    showColumn: function(field){
        return this.getElement().datagrid('showColumn',field);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.hideColumn<br>
     * 函数功能：隐藏指定的列。<br>
     * 参数输入：field   字段名<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    hideColumn: function(field){
        return this.getElement().datagrid('hideColumn',field);
    },
    
    /**
     * 函数名称：com.rainier.easyuiex.UICompositeDataGrid.sort<br>
     * 函数功能：对单元格进行排序<br>
     * 参数输入：三种参数 如下：
     *          // sort on a column
     *          $('#dg').datagrid('sort', 'itemid');
     *          // sort on a column with specified order
     *          $('#dg').datagrid('sort', {
     *              sortName: 'productid',
     *              sortOrder: 'desc'
     *          });
     *          // sort on multiple columns
     *          $('#dg').datagrid('sort', {
     *              sortName: 'productid,listprice',
     *              sortOrder: 'desc,asc'
     *          });<br>
     * 参数输出：无<br>
     * 函数返回：无<br>
     * 异常信息：无<br>
     */
    sort: function(param){
        return this.getElement().datagrid('sort',param);
    },

     /**
     * 函数功能：修改单元格内容
     * [editCell description]
     * @param  {[type]} param 
     * {
     *     index : 0,
     *     field : 'projectedId'
     * } 参数对象
     * @return {[type]}       [description]
     */
    editCell : function(param){
        this.getElement().datagrid('editCell',param);
    }, 

    /**
     * 函数功能：检测当前单元格是否正在修改
     * [isEditing description]
     * @param  {[type]}  index [description]
     * @return {Boolean}       [description]
     */
    isEditing : function(index){
        return this.getElement().datagrid('isEditing',index);
    },

    /**
     * 函数功能：跳转到当前单元格
     * [gotoCell description]
     * @param  {[type]} param 
     * {
     *     index : 0,
     *     field : 'projectedId'
     * } 参数对象
     * @return {[type]}       [description]
     */
    gotoCell : function(param){
        this.getElement().datagrid('gotoCell',param);
    },


    /**
     * 函数光功能：使当前软件可选择
     * [enableCellSelecting description]
     * @return {[type]} [description]
     */
    enableCellSelecting : function(){
        this.getElement.datagrid('enableCellSelecting');
    },

    /**
     * 函数功能：使当前组件不可选择
     * [disableCellSelection description]
     * @return {[type]} [description]
     */
    disableCellSelection : function(){
        this.getElement.datagrid('disableCellSelection');
    },

    /**
     * 函数功能：使当前组件可编辑
     * [enableCellEditing description]
     * @return {[type]} [description]
     */
    enableCellEditing : function(){
        this.getElement.datagrid('enableCellEditing');
    },

    /**
     * 函数功能：使当前datagrid组件不可编辑机
     * [diableCellEditing description]
     * @return {[type]} [description]
     */
    diableCellEditing : function(){
        this.getElement().datagrid('diableCellEditing');
    },

    /**
     * [input description]
     * @param  {[type]} param 
     * {
     *     index : 0,
     *     field : 'projectedId'
     * } 参数对象
     * @return {[type]}       [description]
     */
    input: function(param){
        return this.getElement().datagrid('input',param);
    },

    /**
     * 函数功能：返回当前cell的内容
     * [cell description]
     * @return {[type]} [description]
     */
    cell : function(){
        return this.getElement().datagrid('cell');
    },

    /**
     * 函数功能：获取组件所有被选中的cells
     * [getSelectedCells description]
     * @return {[type]} [description]
     */
    getSelectedCells : function(){
        return this.getElement().datagrid('getSelectedCells');
    },

     /**
     * 函数功能：获取组件所有被选中的cells
     * [getSelectedCells description]
     * @return {[type]} [description]
     */
    unselectAllCells : function(){
        return this.getElement().datagrid('unselectAllCells');
    },

    /**
     * 函数功能：结束编辑cell
     * [getSelectedCells description]
     * @return {[type]} [description]
     */
    endCellEdit : function(accepted){
        return this.getElement().datagrid('endCellEdit',accepted);
    },

});

/**
 * UICompositeDataGrid factory method 
 * @param {Object} parentCom
 * @param {Object} properties
 */